from enum import Enum

# python基础类型Enum枚举
# 枚举是将相关常量组织在一起的方式，但它比简单的常量集合要强大得多


# 1. 定义枚举类
class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3


# 2. 访问枚举成员
# 通过名称访问
color = Color.RED

# 通过值访问
color = Color(1)  # 返回 Color.RED

# 比较枚举成员
if color == Color.RED:
    print("这是红色")

# 3. 获取枚举名称和值
# color变成了一个枚举类型，所以获得了name和value属性，name理解为键，value理解为值
print(color.name)  # 输出: "RED"
print(color.value)  # 输出: 1

# 4.迭代枚举类型
for color in Color:
    print(f"{color.name}: {color.value}")


# 枚举的特点：
""" 
类型安全：枚举提供类型检查，避免使用无效值
  # 这会引发 ValueError
  Color(4)  # 4 不是有效的 Color 值

不仅仅是常量集合：枚举是特殊的类，具有额外的功能
  枚举成员是单例对象
  可以添加自定义方法
  可以被继承和扩展

避免魔法数字：提高代码可读性
  # 使用枚举前
  if block_type == 0:  # 什么是 0？
  
  # 使用枚举后
  if block_type == BlockType.TEXT:  # 清晰明了
  
枚举值可以相同：默认情况下，不同名称可以有相同的值
    class Status(Enum):
      PENDING = 1
      WAITING = 1  # 允许，但访问 Status(1) 将返回 PENDING

可以使用修饰符增强功能：
  from enum import Enum, auto, unique
  
  @unique  # 确保所有值都是唯一的
  class Direction(Enum):
    NORTH = auto()  # 自动分配值
    SOUTH = auto()
    EAST = auto()
    WEST = auto()
"""
